// File generated from our OpenAPI spec by Stainless.

package com.metest.api.services.blocking.rest

import com.google.errorprone.annotations.MustBeClosed
import com.metest.api.core.ClientOptions
import com.metest.api.core.RequestOptions
import com.metest.api.core.http.HttpResponseFor
import com.metest.api.models.rest.actuator.ActuatorBeansParams
import com.metest.api.models.rest.actuator.ActuatorBeansResponse
import com.metest.api.models.rest.actuator.ActuatorConditionsParams
import com.metest.api.models.rest.actuator.ActuatorConditionsResponse
import com.metest.api.models.rest.actuator.ActuatorHealthParams
import com.metest.api.models.rest.actuator.ActuatorHealthResponse
import com.metest.api.models.rest.actuator.ActuatorInfoParams
import com.metest.api.models.rest.actuator.ActuatorInfoResponse
import com.metest.api.models.rest.actuator.ActuatorMappingsParams
import com.metest.api.models.rest.actuator.ActuatorMappingsResponse
import com.metest.api.models.rest.actuator.ActuatorRetrieveParams
import com.metest.api.models.rest.actuator.ActuatorRetrieveResponse
import com.metest.api.models.rest.actuator.ActuatorScheduledtasksParams
import com.metest.api.models.rest.actuator.ActuatorScheduledtasksResponse
import com.metest.api.models.rest.actuator.ActuatorThreaddumpParams
import com.metest.api.models.rest.actuator.ActuatorThreaddumpResponse
import com.metest.api.services.blocking.rest.actuator.CachService
import com.metest.api.services.blocking.rest.actuator.ConfigpropService
import com.metest.api.services.blocking.rest.actuator.EnvService
import com.metest.api.services.blocking.rest.actuator.LoggerService
import com.metest.api.services.blocking.rest.actuator.MetricService
import com.metest.api.services.blocking.rest.actuator.SbomService
import java.util.function.Consumer

interface ActuatorService {

    /**
     * Returns a view of this service that provides access to raw HTTP responses for each method.
     */
    fun withRawResponse(): WithRawResponse

    /**
     * Returns a view of this service with the given option modifications applied.
     *
     * The original service is not modified.
     */
    fun withOptions(modifier: Consumer<ClientOptions.Builder>): ActuatorService

    fun loggers(): LoggerService

    fun sbom(): SbomService

    fun metrics(): MetricService

    fun env(): EnvService

    fun configprops(): ConfigpropService

    fun caches(): CachService

    /** Actuator root web endpoint */
    fun retrieve(): ActuatorRetrieveResponse = retrieve(ActuatorRetrieveParams.none())

    /** @see retrieve */
    fun retrieve(
        params: ActuatorRetrieveParams = ActuatorRetrieveParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): ActuatorRetrieveResponse

    /** @see retrieve */
    fun retrieve(
        params: ActuatorRetrieveParams = ActuatorRetrieveParams.none()
    ): ActuatorRetrieveResponse = retrieve(params, RequestOptions.none())

    /** @see retrieve */
    fun retrieve(requestOptions: RequestOptions): ActuatorRetrieveResponse =
        retrieve(ActuatorRetrieveParams.none(), requestOptions)

    /** Actuator web endpoint 'beans' */
    fun beans(): ActuatorBeansResponse = beans(ActuatorBeansParams.none())

    /** @see beans */
    fun beans(
        params: ActuatorBeansParams = ActuatorBeansParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): ActuatorBeansResponse

    /** @see beans */
    fun beans(params: ActuatorBeansParams = ActuatorBeansParams.none()): ActuatorBeansResponse =
        beans(params, RequestOptions.none())

    /** @see beans */
    fun beans(requestOptions: RequestOptions): ActuatorBeansResponse =
        beans(ActuatorBeansParams.none(), requestOptions)

    /** Actuator web endpoint 'conditions' */
    fun conditions(): ActuatorConditionsResponse = conditions(ActuatorConditionsParams.none())

    /** @see conditions */
    fun conditions(
        params: ActuatorConditionsParams = ActuatorConditionsParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): ActuatorConditionsResponse

    /** @see conditions */
    fun conditions(
        params: ActuatorConditionsParams = ActuatorConditionsParams.none()
    ): ActuatorConditionsResponse = conditions(params, RequestOptions.none())

    /** @see conditions */
    fun conditions(requestOptions: RequestOptions): ActuatorConditionsResponse =
        conditions(ActuatorConditionsParams.none(), requestOptions)

    /** Actuator web endpoint 'health' */
    fun health(): ActuatorHealthResponse = health(ActuatorHealthParams.none())

    /** @see health */
    fun health(
        params: ActuatorHealthParams = ActuatorHealthParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): ActuatorHealthResponse

    /** @see health */
    fun health(params: ActuatorHealthParams = ActuatorHealthParams.none()): ActuatorHealthResponse =
        health(params, RequestOptions.none())

    /** @see health */
    fun health(requestOptions: RequestOptions): ActuatorHealthResponse =
        health(ActuatorHealthParams.none(), requestOptions)

    /** Actuator web endpoint 'info' */
    fun info(): ActuatorInfoResponse = info(ActuatorInfoParams.none())

    /** @see info */
    fun info(
        params: ActuatorInfoParams = ActuatorInfoParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): ActuatorInfoResponse

    /** @see info */
    fun info(params: ActuatorInfoParams = ActuatorInfoParams.none()): ActuatorInfoResponse =
        info(params, RequestOptions.none())

    /** @see info */
    fun info(requestOptions: RequestOptions): ActuatorInfoResponse =
        info(ActuatorInfoParams.none(), requestOptions)

    /** Actuator web endpoint 'mappings' */
    fun mappings(): ActuatorMappingsResponse = mappings(ActuatorMappingsParams.none())

    /** @see mappings */
    fun mappings(
        params: ActuatorMappingsParams = ActuatorMappingsParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): ActuatorMappingsResponse

    /** @see mappings */
    fun mappings(
        params: ActuatorMappingsParams = ActuatorMappingsParams.none()
    ): ActuatorMappingsResponse = mappings(params, RequestOptions.none())

    /** @see mappings */
    fun mappings(requestOptions: RequestOptions): ActuatorMappingsResponse =
        mappings(ActuatorMappingsParams.none(), requestOptions)

    /** Actuator web endpoint 'scheduledtasks' */
    fun scheduledtasks(): ActuatorScheduledtasksResponse =
        scheduledtasks(ActuatorScheduledtasksParams.none())

    /** @see scheduledtasks */
    fun scheduledtasks(
        params: ActuatorScheduledtasksParams = ActuatorScheduledtasksParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): ActuatorScheduledtasksResponse

    /** @see scheduledtasks */
    fun scheduledtasks(
        params: ActuatorScheduledtasksParams = ActuatorScheduledtasksParams.none()
    ): ActuatorScheduledtasksResponse = scheduledtasks(params, RequestOptions.none())

    /** @see scheduledtasks */
    fun scheduledtasks(requestOptions: RequestOptions): ActuatorScheduledtasksResponse =
        scheduledtasks(ActuatorScheduledtasksParams.none(), requestOptions)

    /** Actuator web endpoint 'threaddump' */
    fun threaddump(): ActuatorThreaddumpResponse = threaddump(ActuatorThreaddumpParams.none())

    /** @see threaddump */
    fun threaddump(
        params: ActuatorThreaddumpParams = ActuatorThreaddumpParams.none(),
        requestOptions: RequestOptions = RequestOptions.none(),
    ): ActuatorThreaddumpResponse

    /** @see threaddump */
    fun threaddump(
        params: ActuatorThreaddumpParams = ActuatorThreaddumpParams.none()
    ): ActuatorThreaddumpResponse = threaddump(params, RequestOptions.none())

    /** @see threaddump */
    fun threaddump(requestOptions: RequestOptions): ActuatorThreaddumpResponse =
        threaddump(ActuatorThreaddumpParams.none(), requestOptions)

    /** A view of [ActuatorService] that provides access to raw HTTP responses for each method. */
    interface WithRawResponse {

        /**
         * Returns a view of this service with the given option modifications applied.
         *
         * The original service is not modified.
         */
        fun withOptions(modifier: Consumer<ClientOptions.Builder>): ActuatorService.WithRawResponse

        fun loggers(): LoggerService.WithRawResponse

        fun sbom(): SbomService.WithRawResponse

        fun metrics(): MetricService.WithRawResponse

        fun env(): EnvService.WithRawResponse

        fun configprops(): ConfigpropService.WithRawResponse

        fun caches(): CachService.WithRawResponse

        /**
         * Returns a raw HTTP response for `get /rest/actuator`, but is otherwise the same as
         * [ActuatorService.retrieve].
         */
        @MustBeClosed
        fun retrieve(): HttpResponseFor<ActuatorRetrieveResponse> =
            retrieve(ActuatorRetrieveParams.none())

        /** @see retrieve */
        @MustBeClosed
        fun retrieve(
            params: ActuatorRetrieveParams = ActuatorRetrieveParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): HttpResponseFor<ActuatorRetrieveResponse>

        /** @see retrieve */
        @MustBeClosed
        fun retrieve(
            params: ActuatorRetrieveParams = ActuatorRetrieveParams.none()
        ): HttpResponseFor<ActuatorRetrieveResponse> = retrieve(params, RequestOptions.none())

        /** @see retrieve */
        @MustBeClosed
        fun retrieve(requestOptions: RequestOptions): HttpResponseFor<ActuatorRetrieveResponse> =
            retrieve(ActuatorRetrieveParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/beans`, but is otherwise the same as
         * [ActuatorService.beans].
         */
        @MustBeClosed
        fun beans(): HttpResponseFor<ActuatorBeansResponse> = beans(ActuatorBeansParams.none())

        /** @see beans */
        @MustBeClosed
        fun beans(
            params: ActuatorBeansParams = ActuatorBeansParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): HttpResponseFor<ActuatorBeansResponse>

        /** @see beans */
        @MustBeClosed
        fun beans(
            params: ActuatorBeansParams = ActuatorBeansParams.none()
        ): HttpResponseFor<ActuatorBeansResponse> = beans(params, RequestOptions.none())

        /** @see beans */
        @MustBeClosed
        fun beans(requestOptions: RequestOptions): HttpResponseFor<ActuatorBeansResponse> =
            beans(ActuatorBeansParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/conditions`, but is otherwise the
         * same as [ActuatorService.conditions].
         */
        @MustBeClosed
        fun conditions(): HttpResponseFor<ActuatorConditionsResponse> =
            conditions(ActuatorConditionsParams.none())

        /** @see conditions */
        @MustBeClosed
        fun conditions(
            params: ActuatorConditionsParams = ActuatorConditionsParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): HttpResponseFor<ActuatorConditionsResponse>

        /** @see conditions */
        @MustBeClosed
        fun conditions(
            params: ActuatorConditionsParams = ActuatorConditionsParams.none()
        ): HttpResponseFor<ActuatorConditionsResponse> = conditions(params, RequestOptions.none())

        /** @see conditions */
        @MustBeClosed
        fun conditions(
            requestOptions: RequestOptions
        ): HttpResponseFor<ActuatorConditionsResponse> =
            conditions(ActuatorConditionsParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/health`, but is otherwise the same as
         * [ActuatorService.health].
         */
        @MustBeClosed
        fun health(): HttpResponseFor<ActuatorHealthResponse> = health(ActuatorHealthParams.none())

        /** @see health */
        @MustBeClosed
        fun health(
            params: ActuatorHealthParams = ActuatorHealthParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): HttpResponseFor<ActuatorHealthResponse>

        /** @see health */
        @MustBeClosed
        fun health(
            params: ActuatorHealthParams = ActuatorHealthParams.none()
        ): HttpResponseFor<ActuatorHealthResponse> = health(params, RequestOptions.none())

        /** @see health */
        @MustBeClosed
        fun health(requestOptions: RequestOptions): HttpResponseFor<ActuatorHealthResponse> =
            health(ActuatorHealthParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/info`, but is otherwise the same as
         * [ActuatorService.info].
         */
        @MustBeClosed
        fun info(): HttpResponseFor<ActuatorInfoResponse> = info(ActuatorInfoParams.none())

        /** @see info */
        @MustBeClosed
        fun info(
            params: ActuatorInfoParams = ActuatorInfoParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): HttpResponseFor<ActuatorInfoResponse>

        /** @see info */
        @MustBeClosed
        fun info(
            params: ActuatorInfoParams = ActuatorInfoParams.none()
        ): HttpResponseFor<ActuatorInfoResponse> = info(params, RequestOptions.none())

        /** @see info */
        @MustBeClosed
        fun info(requestOptions: RequestOptions): HttpResponseFor<ActuatorInfoResponse> =
            info(ActuatorInfoParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/mappings`, but is otherwise the same
         * as [ActuatorService.mappings].
         */
        @MustBeClosed
        fun mappings(): HttpResponseFor<ActuatorMappingsResponse> =
            mappings(ActuatorMappingsParams.none())

        /** @see mappings */
        @MustBeClosed
        fun mappings(
            params: ActuatorMappingsParams = ActuatorMappingsParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): HttpResponseFor<ActuatorMappingsResponse>

        /** @see mappings */
        @MustBeClosed
        fun mappings(
            params: ActuatorMappingsParams = ActuatorMappingsParams.none()
        ): HttpResponseFor<ActuatorMappingsResponse> = mappings(params, RequestOptions.none())

        /** @see mappings */
        @MustBeClosed
        fun mappings(requestOptions: RequestOptions): HttpResponseFor<ActuatorMappingsResponse> =
            mappings(ActuatorMappingsParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/scheduledtasks`, but is otherwise the
         * same as [ActuatorService.scheduledtasks].
         */
        @MustBeClosed
        fun scheduledtasks(): HttpResponseFor<ActuatorScheduledtasksResponse> =
            scheduledtasks(ActuatorScheduledtasksParams.none())

        /** @see scheduledtasks */
        @MustBeClosed
        fun scheduledtasks(
            params: ActuatorScheduledtasksParams = ActuatorScheduledtasksParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): HttpResponseFor<ActuatorScheduledtasksResponse>

        /** @see scheduledtasks */
        @MustBeClosed
        fun scheduledtasks(
            params: ActuatorScheduledtasksParams = ActuatorScheduledtasksParams.none()
        ): HttpResponseFor<ActuatorScheduledtasksResponse> =
            scheduledtasks(params, RequestOptions.none())

        /** @see scheduledtasks */
        @MustBeClosed
        fun scheduledtasks(
            requestOptions: RequestOptions
        ): HttpResponseFor<ActuatorScheduledtasksResponse> =
            scheduledtasks(ActuatorScheduledtasksParams.none(), requestOptions)

        /**
         * Returns a raw HTTP response for `get /rest/actuator/threaddump`, but is otherwise the
         * same as [ActuatorService.threaddump].
         */
        @MustBeClosed
        fun threaddump(): HttpResponseFor<ActuatorThreaddumpResponse> =
            threaddump(ActuatorThreaddumpParams.none())

        /** @see threaddump */
        @MustBeClosed
        fun threaddump(
            params: ActuatorThreaddumpParams = ActuatorThreaddumpParams.none(),
            requestOptions: RequestOptions = RequestOptions.none(),
        ): HttpResponseFor<ActuatorThreaddumpResponse>

        /** @see threaddump */
        @MustBeClosed
        fun threaddump(
            params: ActuatorThreaddumpParams = ActuatorThreaddumpParams.none()
        ): HttpResponseFor<ActuatorThreaddumpResponse> = threaddump(params, RequestOptions.none())

        /** @see threaddump */
        @MustBeClosed
        fun threaddump(
            requestOptions: RequestOptions
        ): HttpResponseFor<ActuatorThreaddumpResponse> =
            threaddump(ActuatorThreaddumpParams.none(), requestOptions)
    }
}
